<?php
namespace backend\controllers;

use Yii;
use yii\data\Pagination;
use common\models\GameState;

/**
 * 游戏状态管理
 *
 * @author jois
 *
 */
class GameStateController extends BaseController
{

    /**
     * 游戏状态列表
     */
    public function actionIndex()
    {
        $input = Yii::$app->request->get();
        // 根据参数获取信息
        if (!empty($input['key'])) {
            $query = GameState::find()->where("state_name like '%" . $input['key'] . "%'");
        } else {
            $query = GameState::find();
        }

        // 根据排序抓取分页列表数据
        if (!empty($input['sort'])) {
            $query->orderBy("alias {$input['sort']}");
        }
        $countQuery = clone $query;

        // 分页处理
        $pages = new Pagination([
            'totalCount' => $countQuery->count()
        ]);
        $models = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();

        return $this->render('index', compact('models', 'pages'));
    }

    /**
     * 添加或修改游戏状态
     */
    public function actionEdit()
    {
        $model = null;
        $id = Yii::$app->request->get('state_id', 0);
        if ((int) $id > 0) {
            $model = GameState::findOne((int) $id);
        }
        return $this->render('edit', compact('model'));
    }

    /**
     * 保存新增或修改的游戏状态
     */
    public function actionSave()
    {
        $post = Yii::$app->request->post();
        Yii::$app->session->setFlash('post', $post);
        if (Yii::$app->request->isPost && ! empty($post)) {
            // 保存数据
            $game_state = isset($post['state_id']) ? GameState::findOne([
                'state_id' => (int) $post['state_id']
            ]) : new GameState();
            $game_state->attributes = $post;
            $game_state->save();

            // 验证数据
            if (! empty($game_state->getErrors())) {
                Yii::$app->session->setFlash('message_error', $game_state->getErrors());
                return $this->redirect(Yii::$app->request->referrer);
            }
            Yii::$app->session->setFlash('message_success', isset($post['state_id']) ? '编辑成功！' : '添加成功！');
            $session = Yii::$app->session;
            unset($session['post']);
            return $this->redirect('/game-state/index', 200);
        }
        throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交保存数据');
        return false;
    }

    /**
     * 游戏状态删除
     */
    public function actionDelete()
    {
        if (! Yii::$app->request->isPost) {
            throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交删除数据');
            return false;
        }
        // 验证游戏状态是否存在
        $query = GameState::findOne((int) Yii::$app->request->post('state_id'));
        if (is_object($query)) {
            // 执行删除，并返回成功信息
            $query->delete();
            Yii::$app->session->setFlash('message_success', '删除成功！');
            return $this->redirect('/game-state/index', 200);
        }
        // 不存在返回上一页，并返回错误信息
        Yii::$app->session->setFlash('message_error', '此游戏状态不存在！');
        return $this->redirect(Yii::$app->request->referrer);
    }
}
